# -*- coding: utf-8 -*-
from django import forms

from djtools.formfields import BrDataField, BrCepField
from djtools.formwidgets import BrDataWidget
from django.contrib.localflavor.br.br_states import STATE_CHOICES

from rh.models import Servidor, Dependente, AtestadoSaude, TipoExame
from comum.models import Endereco
from comum import choices
from comum.forms import PessoaForm

############
# SERVIDOR #
############

class ServidorForm(PessoaForm):
    
    class Meta:
        model = Servidor
    nome = forms.CharField(label=u'Nome', max_length=200, widget=forms.TextInput(attrs={'size':'70'}))
    grupo_sanguineo = forms.ChoiceField(label=u'Grupo sanguíneo', widget=forms.Select(), choices=choices.GRUPO_SANGUINEO, required=False)
    fator_rh = forms.ChoiceField(label=u'Fator RH', widget=forms.Select(), choices=choices.FATOR_RH, required=False)
    raca = forms.ChoiceField(label=u'Cor/Raça', widget=forms.Select(), choices=choices.COR_RACA, required=False)
    escolaridade = forms.ChoiceField(label=u'Escolaridade', widget=forms.Select(), choices=choices.ESCOLARIDADE, required=False)
    sexo = forms.ChoiceField(label=u'Sexo', widget=forms.Select(), choices=choices.SEXO, required=False)
    tipo_nec_especial = forms.ChoiceField(label=u'Tipo de Necessidade Especial', widget=forms.Select(), choices=choices.NECESS_ESPECIAL, required=False)
    
    nome_mae = forms.CharField(label=u'Nome da Mãe', max_length=100, widget=forms.TextInput(attrs={'size':'70'}), required=False)
    nome_pai = forms.CharField(label=u'Nome do Pai', max_length=100, widget=forms.TextInput(attrs={'size':'70'}), required=False)
    
    data_admissao = BrDataField(label=u'Data de Admissão', widget=BrDataWidget(), required=False)
    data_expedicao = BrDataField(label=u'Data de Expedição', widget=BrDataWidget(), required=False)

class DependenteForm(PessoaForm):
    
    class Meta:
        model = Dependente
        exclude = ['nome_mae','nome_pai','naturalidade','estado_civil','rg','uf','via_documento','excluido']
    fieldsets = [
        ('Dados Pessoais do Dependente', {'fields': [('servidor'),('nome','data_nascimento'),('sexo','nacionalidade'),
                                                     ('cpf','grau_parentesco')]}),
        (u'Certidão de Nascimento', {'fields': [('cn_livro','cn_folha','cn_termo','cn_data')]}),
        (u'Endereço do Dependente', {'fields': ['logradouro',('numero','complemento'),('bairro','municipio'),
                                  'estado', 'cep']}),
                ]
    
    def __init__(self, *args, **kwargs):
        servidor_id = kwargs.pop('servidor_id')
        servidor = Servidor.objects.get(id=servidor_id)
        super(DependenteForm, self).__init__(*args, **kwargs)
        self.fields['servidor'].initial = servidor.id
        if 'instance' in kwargs:
            endereco = Endereco.objects.get(pk=kwargs['instance'].endereco_set.all()[0].pk)
            self.fields['logradouro'].initial = endereco.logradouro
            self.fields['numero'].initial = endereco.numero
            self.fields['complemento'].initial = endereco.complemento
            self.fields['bairro'].initial = endereco.bairro
            self.fields['municipio'].initial = endereco.municipio
            self.fields['estado'].initial = endereco.estado
            self.fields['cep'].initial = endereco.cep
        else:
            serv_ende = Endereco.objects.get(pessoa=servidor.id)
            self.fields['logradouro'].initial = serv_ende.logradouro
            self.fields['numero'].initial = serv_ende.numero
            self.fields['complemento'].initial = serv_ende.complemento
            self.fields['bairro'].initial = serv_ende.bairro
            self.fields['municipio'].initial = serv_ende.municipio
            self.fields['estado'].initial = serv_ende.estado
            self.fields['cep'].initial = serv_ende.cep
    
    def save(self, commit=True, force_insert=False, force_update=False):
        dependente = super(DependenteForm, self).save()
        if not self.instance.endereco_set.exists():
            endereco = dependente.endereco_set.create()
        else:
            endereco = dependente.endereco_set.get(pk=self.instance.endereco_set.all()[0].pk)
        endereco.logradouro = self.cleaned_data['logradouro']
        endereco.numero = self.cleaned_data['numero']
        endereco.complemento = self.cleaned_data['complemento']
        endereco.bairro = self.cleaned_data['bairro']
        endereco.municipio = self.cleaned_data['municipio']
        endereco.estado = self.cleaned_data['estado']
        endereco.cep = self.cleaned_data['cep']
        endereco.save()
        self.instance.endereco = endereco
        return super(DependenteForm, self).save(commit)
    
    servidor = forms.ModelChoiceField(queryset=Servidor.objects.all(), widget=forms.HiddenInput())
    nome = forms.CharField(label=u'Nome', max_length=200, widget=forms.TextInput(attrs={'size':'70'}))
    grau_parentesco = forms.ChoiceField(label=u'Grau de Parentesco', widget=forms.Select(), choices=choices.TIPO_DEPENDENTE)
    
    cn_livro = forms.CharField(label=u'Livro', widget=forms.TextInput(attrs={'size':'05'}), required=False)
    cn_folha = forms.CharField(label=u'Folha', widget=forms.TextInput(attrs={'size':'05'}), required=False)
    cn_termo = forms.CharField(label=u'Termo', widget=forms.TextInput(attrs={'size':'05'}), required=False)
    cn_data = BrDataField(label=u'Data', widget=BrDataWidget(), required=False)
    
    logradouro = forms.CharField(label=u'Logradouro', widget=forms.TextInput(attrs={'size':'60'}))
    numero = forms.CharField(label=u'Número', required=False)
    complemento = forms.CharField(label=u'Complemento', required=False)
    bairro = forms.CharField(label=u'Bairro', required=False)
    municipio = forms.CharField(label=u'Município', required=False)
    estado = forms.ChoiceField(label=u'Estado', widget=forms.Select(), choices=STATE_CHOICES, required=False)
    cep = BrCepField(label=u'CEP')

#############
# ETIQUETAS #
#############

class EtiquetasServidoresForm(forms.Form):
    CAMPOS = [
        ('nome', 'Nome'),
        ('endereco__cep', 'CEP'),
        ('matricula', 'Matrícula'),
        ('matricula_siape','Matrícula SIAPE') 
        ]
    ordem = forms.ChoiceField(label=u'Ordenar por', widget=forms.Select(), choices=CAMPOS, required=False)
    
    METHOD = 'GET'
    TITLE = 'Gerar Etiquetas dos Servidores'
    
##################
# ATESTADO SAUDE #
##################
class AtestadoSaudeForm(forms.ModelForm):
    class Meta:
        model = AtestadoSaude
    
    def __init__(self, *args, **kwargs):
        servidor_id = kwargs.pop('servidor_id')
        servidor = Servidor.objects.get(id=servidor_id)
        super(AtestadoSaudeForm, self).__init__(*args, **kwargs)
        self.fields['servidor'].initial = servidor.id
        
    def save(self, commit=True, force_insert=False, force_update=False):
        atestado = super(AtestadoSaudeForm, self).save()
        atestado.data_validade = self.instance.calc_data_validade()
        return super(AtestadoSaudeForm, self).save(commit)
        
    fieldsets = [
        ('Dados do Atestado', {'fields': ['servidor','tipo_exame','data_exame','validade_exame']}),
    ]
    CAMPOS = [
              ('6 meses', '6 meses'),
              ('1 ano', '1 ano'),
              ('2 anos', '2 anos')
              ]
    servidor = forms.ModelChoiceField(queryset=Servidor.objects.all())
    data_exame = BrDataField(label=u'Data do Exame', widget=BrDataWidget())
    validade_exame = forms.ChoiceField(label=u'Validade do Exame', widget=forms.Select(), choices=CAMPOS)
    tipo_exame = forms.ModelChoiceField(queryset=TipoExame.objects.all())
    
    TITLE = 'Controle de Atestado de Saúde'
    